﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Contract.Business.Process;
using Contract.Business.Entity;
using Contract.Business.Filter;
using System.Configuration;


namespace Fast.Presentation.WinForms
{
    public partial class frmConfiguracao : Form
    {
        public frmConfiguracao()
        {
            InitializeComponent();
        }

        #region Atributos

        BPConfiguracao process;
        BEConfiguracao configuracao;

        #endregion

        #region Eventos
        private void cboGrupoBebida_SelectedIndexChanged(object sender, EventArgs e)
        {
            UtilidadesListas.carregarSubGrupo(this.cboSuco, int.Parse(this.cboGrupoBebida.SelectedValue.ToString()));
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Deseja sair?", Utilidades.GetProjectName(), MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                this.Close();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarFormulario())
                {
                    if (configuracao == null)
                        configuracao = new BEConfiguracao();

                    configuracao.Nome = this.txtNome.Text;
                    configuracao.CodigoGrupoPizza = int.Parse(this.cboGrupoPizza.SelectedValue.ToString());
                    configuracao.CodigoGrupoBebida = int.Parse(this.cboGrupoBebida.SelectedValue.ToString());
                    if (this.cboTamanhoPizzaGrande.SelectedValue.ToString() == "0")
                        configuracao.CodigoTamanhoPizzaGrande = null;
                    else
                        configuracao.CodigoTamanhoPizzaGrande = int.Parse(this.cboTamanhoPizzaGrande.SelectedValue.ToString());

                    if (this.cboSuco.SelectedValue.ToString() == "0")
                        configuracao.CodigoSubGrupoSuco = null;
                    else
                        configuracao.CodigoSubGrupoSuco = int.Parse(this.cboSuco.SelectedValue.ToString());

                    if (this.cboCupom.SelectedValue.ToString() == "0")
                        configuracao.CodigoTipoPagamentoCupom = null;
                    else
                        configuracao.CodigoTipoPagamentoCupom = int.Parse(this.cboCupom.SelectedValue.ToString());

                    configuracao.CodigoTamanhoPizzaPequena = int.Parse(this.cboTamanhoPizzaPequena.SelectedValue.ToString());
                    configuracao.CodigoTamanhoPizzaMedia = int.Parse(this.cboTamanhoPizzaMedia.SelectedValue.ToString());
                    configuracao.CodigoSubGrupoClassic = int.Parse(this.cboSubGrupoClassic.SelectedValue.ToString());

                    Printers p = (Printers)cboImpressoras.SelectedItem;
                    configuracao.CodigoImpressora = (short)p;

                    configuracao.Porta = this.txtPorta.Text;

                    configuracao.AplicaPromocaoDiaria = this.chkAplicaPromocaoDiaria.Checked;
                    configuracao.ValorBorda = this.txtValorBorda.Valor;

                    process = new BPConfiguracao();

                    process.Salvar(configuracao);

                    Utilidades.ExibirMensagem("Configuração alterada com sucesso.");
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                Utilidades.LogarError(ex);
                MessageBox.Show(Utilidades.BuscarMensagemError());
            }
        }

        private void frmConfiguracao_Load(object sender, EventArgs e)
        {
            List<ComboBox> listCboTamanhos = new List<ComboBox>();
            listCboTamanhos.Add(this.cboTamanhoPizzaGrande);
            listCboTamanhos.Add(this.cboTamanhoPizzaMedia);
            listCboTamanhos.Add(this.cboTamanhoPizzaPequena);

            cboImpressoras.DataSource = Enum.GetValues(typeof(Printers));

            UtilidadesListas.carregarTamanhoLista(listCboTamanhos);

            UtilidadesListas.carregarGrupos(cboGrupoPizza, cboGrupoBebida);
            UtilidadesListas.carregarTipoPagamento(this.cboCupom);

            process = new BPConfiguracao();
            configuracao = process.ObterTodos(new FEConfiguracao()).FirstOrDefault();
            if (configuracao != null)
            {
                this.txtNome.Text = configuracao.Nome;
                this.chkAplicaPromocaoDiaria.Checked = configuracao.AplicaPromocaoDiaria;
                this.txtValorBorda.Text = configuracao.ValorBorda.ToString("N2");

                preencherGrupos();

                preencherTamanhosPizzas();

                preencherPagamentos();

                preencherSubGrupos();

                preencherImpressoras();
            }
        }

        private void cboGrupoPizza_SelectedIndexChanged(object sender, EventArgs e)
        {
            UtilidadesListas.carregarSubGrupo(this.cboSubGrupoClassic, int.Parse(this.cboGrupoPizza.SelectedValue.ToString()));
        }
        #endregion

        #region Métodos
        private void preencherImpressoras()
        {
            if (configuracao.CodigoImpressora.HasValue)
                this.cboImpressoras.SelectedItem = (Printers)configuracao.CodigoImpressora;
            else
                this.cboImpressoras.SelectedItem = Printers.Selecione;

            this.txtPorta.Text = configuracao.Porta;
        }

        private void preencherPagamentos()
        {
            if (configuracao.CodigoTipoPagamentoCupom.HasValue)
                this.cboCupom.SelectedValue = configuracao.CodigoTipoPagamentoCupom;
            else
                this.cboCupom.SelectedValue = 0;
        }

        private void preencherSubGrupos()
        {
            UtilidadesListas.carregarSubGrupo(this.cboSuco, int.Parse(this.cboGrupoBebida.SelectedValue.ToString()));
            if (configuracao.CodigoSubGrupoSuco.HasValue)
                this.cboSuco.SelectedValue = configuracao.CodigoSubGrupoSuco;
            else
                this.cboSuco.SelectedValue = 0;

            UtilidadesListas.carregarSubGrupo(this.cboSubGrupoClassic, int.Parse(this.cboGrupoPizza.SelectedValue.ToString()));
            if (configuracao.CodigoSubGrupoClassic.HasValue)
                this.cboSubGrupoClassic.SelectedValue = configuracao.CodigoSubGrupoClassic;
            else
                this.cboSubGrupoClassic.SelectedValue = 0;
        }

        private void preencherGrupos()
        {
            this.cboGrupoPizza.SelectedValue = configuracao.CodigoGrupoPizza;
            this.cboGrupoBebida.SelectedValue = configuracao.CodigoGrupoBebida;
        }

        private void preencherTamanhosPizzas()
        {
            if (configuracao.CodigoTamanhoPizzaGrande.HasValue)
                this.cboTamanhoPizzaGrande.SelectedValue = configuracao.CodigoTamanhoPizzaGrande;
            else
                this.cboTamanhoPizzaGrande.SelectedValue = 0;

            if (configuracao.CodigoTamanhoPizzaMedia.HasValue)
                this.cboTamanhoPizzaMedia.SelectedValue = configuracao.CodigoTamanhoPizzaMedia;
            else
                this.cboTamanhoPizzaPequena.SelectedValue = 0;

            if (configuracao.CodigoTamanhoPizzaPequena.HasValue)
                this.cboTamanhoPizzaPequena.SelectedValue = configuracao.CodigoTamanhoPizzaPequena;
            else
                this.cboTamanhoPizzaPequena.SelectedValue = 0;
        }

        private bool ValidarFormulario()
        {
            if (String.IsNullOrEmpty(this.txtNome.Text))
            {
                Utilidades.ExibirMensagem("Campo NOME é obrigatório.");
                return false;
            }

            if (this.cboGrupoPizza.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo PIZZAS é obrigatório.");
                return false;
            }

            if (this.cboGrupoBebida.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo BEBIDAS é obrigatório.");
                return false;
            }

            if (this.cboTamanhoPizzaGrande.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo TAMANHO PIZZA GRANDE é obrigatório.");
                return false;
            }

            if (this.cboTamanhoPizzaMedia.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo TAMANHO PIZZA MÉDIA é obrigatório.");
                return false;
            }

            if (this.cboSuco.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo SUCO é obrigatório.");
                return false;
            }

            if (this.cboCupom.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo PAGAMENTO C/ CUPOM é obrigatório.");
                return false;
            }

            if (this.cboTamanhoPizzaPequena.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo TAMANHO PIZZA PEQUENA é obrigatório.");
                return false;
            }

            if (this.cboSubGrupoClassic.SelectedValue.ToString() == "0")
            {
                Utilidades.ExibirMensagem("Campo SUBGRUPO CLASSIC é obrigatório.");
                return false;
            }

            if (this.cboImpressoras.SelectedIndex == 0)
            {
                Utilidades.ExibirMensagem("Campo IMPRESSORA é obrigatório.");
                return false;
            }

            if (String.IsNullOrEmpty(this.txtPorta.Text))
            {
                Utilidades.ExibirMensagem("Campo PORTA é obrigatório.");
                return false;
            }

            return true;
        }

        #endregion


    }
}
